CentOS7环境下部署Mariadb | 您所在的位置:网站首页 › galera mysql › CentOS7环境下部署Mariadb |
搭建基于Galera的MySql集群 CentOS7环境下部署Mariadb-Galera集群 ##mariadb-galera官网包:https://mariadb.com/kb/en/mariadb/yum/ ##mariadb-server官网包:http://yum.mariadb.org/10.1/centos7-amd64/rpms/ ##mysql-galera官网包:http://releases.galeracluster.com/centos/6/x86_64 #这里的centos/6/x86_64需要根据你的系统自行修改 ##galera源码包:https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/ ##博客:http://blog.sina.com.cn/s/blog_8ea8e9d50102ws4x.html 说明:mariadb-10.1.x版本,galera wsrep(Write Set replication)API库已经内嵌到版本中, 而10.0.x的版本是分开的两个包mariadb-galera(mariadb的galera版本),galera(提供wsrep API的库libgalera_smm.so)。 galera官方安装说明(标准文档,首选的参考方案):https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/ 主题开始: 现在线上项目的MYSQL数据库集群很多采用Galera Cluster的技术来搭建,以前很多互联网公司采用MySql官方提供的主从集群,而Galera的集群解决方案则没有主从限制,每个单独的点都可以使用,还是比较独特的,就自己搭了三台虚拟机实现了下。 Galera Cluster for MySQL是一套基于同步复制的多主MySQL集群解决方案,使用简单,没有单点故障,可用性高,能很好保证业务不断增长时我们数据的安全和随时的扩展。 galera群集的主要特点: 多主机数据同步复制 多主服务器的拓扑结构 每个node节点都是主服务器,每个node都有全部数据. 每个节点都可以提供写和读 数据复制只支持InnoDB引擎. 所有node节点同步数据通过wsrep接口 每个节点下线后,自动从集群中下线 自动剔除故障节点 自动加入新节点 真正行级别的并发复制 客户端连接跟操作单台MySQL数据库的体验一致 Galera本质是一个wsrep提供者(provider),运行依赖于wsrep的API接口。Wsrep API定义了一系列应用回调和复制调用库,来实现事务数据库同步写集(writeset)复制以及相似应用。目的在于从应用细节上实现抽象的,隔离的复制。虽然这个接口的主要目标是基于认证的多主复制,但同样适用于异步和同步的主从复制。 项目的系统环境: CentOS6 64位 MariaDB版本: 版本一:MariaDB-Galera-server10.0.14 安装方法: yum install MariaDB-Galera-server MariaDB-client galera mlocate createrepo -y 版本二:MariaDB-Galera-server10.1或10.3 yum install MariaDB-server MariaDB-client galera mlocate createrepo -y galera集群配置思路: 1、在每台主机上停止运行mysqld或mariadb服务。并设置服务为开机不启动。 2、在每台主机上安装galera软件,并启动mysql服务(此处是galera的服务)。 3、在每台主机上创建用于galera同步数据的用户账号,停止mysql服务(此处是galera的服务)。 4、设置每台galera主机的配置文件/etc/my.cnf.d/server.cnf,保证设置正确。 5、初始化启动第1台galera主机的集群环境: service mysql stop service mysql start --wsrep-new-cluster mysql -uroot -p -e "show status like 'wsrep_%';" 6、启动其他galera主机,验证集群状态:mysql -uroot -p -e "show status like 'wsrep_%';" 项目的准备工作 最少三台机器,当然两台也可以,但是两台的话需要额外配置(见官方说明),一般应该也不会少于三台吧。 系统 ip角色 CentOS 6.5192.168.100.71Node1 CentOS 6.5192.168.100.72Node2 CentOS 6.5192.168.100.72Node3 配置防火墙规则,参考官方的说明,我这里偷懒就直接关闭了防火墙。 service firewalld stop chkconfig firewalld off setenforce 0 getenforce sed -i '/^SELINUX=/s/enforcing/permissive/' /etc/selinux/config 修改每台机器/etc/sysconfig/selinux配置,将SELINUX=enforcing改为SELINUX=disabled,这一步很重要,不然后面一切都白费。 修改系每台主机的hosts文件,实现本地域名解析(选做,不做也不影响): vi /etc/hosts 添加如下内容 192.168.100.71node1 192.168.100.72node2 192.168.100.72node3 后期用root登录galera集群查状态: mysql -uroot -p show status like 'wsrep%';(首选) SHOW STATUS LIKE 'wsrep_cluster_size'; show global status like 'ws%'; SHOW VARIABLES LIKE 'wsrep_cluster_address'; 查集群中的主机地址 show status like 'wsrep_ready'; 查wsrep状态 下载安装 ###galera-10.0.31官方rpm包下载(以下实验首选): centos6版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos6-amd64/rpms/ centos7版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos7-amd64/rpms/ ###galera-10.3官方rpm包下载(已测试OK): centos6版的galera-10.3软件http://yum.mariadb.org/10.3/centos6-amd64/rpms/ 使用yum安装galera-10.0.31版: 添加galera的资源仓库,在/etc/yum.repos.d/目录下新增galera.repo文件,并编辑文件添加如下内容: 金的本地galera源(很快,首选),网络yum源很慢,建议先到官网下载rpm软件包,再用配置本地yum源安装。 vi /etc/yum.repos.d/galera.repo 配置文件如下: [galera] name=galera baseurl=file:///root/7galera #baseurl=http://yum.mariadb.org/10.0.31/centos6-amd64/ enabled=1 gpgcheck=0 金安装方法: 2. 开始安装(金已测OK) yum install MariaDB-Galera-server MariaDB-client galera mlocate createrepo -y rpm -q MariaDB-Galera-server MariaDB-client galera 安装完后,查看ls /etc/my.cnf.d/下的文件是否为如下: mariadb-client.conf server.conf tokudb.conf 查galera的动态链接库文件路径: updatedb locate libgalera_smm.so 补充说明: 使用yum安装galera-10.3版(测试OK):yum install MariaDB-server MariaDB-client galera mlocate createrepo -y (配置方法同下) 3. 在三台主机上初始化mariadb,并且创建集群账户。(金测OK) 启动mysql服务: service mysql start (不用做)新版本的mysql必须使用初始密码登录了,无法本地匿名或admin方式初始化密码了,初始化密码一般存放在errlog里可以通过 ps -ef | grep mysql 来查询errlog位置,然后再通过 cat /var/log/mysqld.log | grep "temporary password" 来查看你的初始密码,第一次登录后会强制你修改密码的。 ##(选做)ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz!QAZ'; #新版本对密码强度有要求了,不然会报错 (必做)#创建新用户 说明:以下是在本地用root登录到mariadb服务器,创建一个新管理员账号,用于galera数据同步身份认证。 mysql -uroot grant all PRIVILEGES on *.* to myroot@'%' identified by 'reppass'; FLUSH PRIVILEGES; select user,host,password from mysql.user; exit 配置 编辑vi /etc/my.cnf.d/server.cnf 在[galera]内部增加如下内容(可以直接复制以下代码): wsrep_on=ON binlog_format=ROW bind-address=0.0.0.0 default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 wsrep_cluster_name=MyCLuster wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://" ##wsrep_cluster_address="gcomm://192.168.100.71,192.168.100.72,192.168.100.73" wsrep_node_name=node1 wsrep_node_address=192.168.100.71 wsrep_sst_method=rsync wsrep_sst_auth=myroot:reppass 查看cat /etc/my.cnf.d/server.cnf 配置文件功能解释: wsrep_on=ON //启用wsrep功能,必选 binlog_format=ROW //二进制日志文件格式为ROW,还可以是mix bind-address=0.0.0.0 //监听端口 default_storage_engine=innodb //默认存储引擎为innodb innodb_autoinc_lock_mode=2 //innodb锁的模式 innodb_flush_log_at_trx_commit=0 //每隔0秒同步刷新数据 wsrep_cluster_name=MyCLuster //wsrep集群名称 wsrep_provider=/usr/lib64/galera/libgalera_smm.so //wsrep集群服务的库文件 wsrep_cluster_address="gcomm://" //用于第一台galera集群主机 ##wsrep_cluster_address="gcomm://192.168.100.71,192.168.100.72,192.168.100.73" //用于其他galera集群主机 wsrep_node_name=node1 //当前集群主机名 wsrep_node_address=192.168.100.71 //当前集群主机ip地址 wsrep_sst_method=rsync //wsrep_sst方法为同步 wsrep_sst_auth=myroot:reppass //同步的账号myroot,密码reppass,需要用grant创建此账号。 说明:如果不想使用用户名和密码验证,然后再进行数据同步复制,那么可以注释掉wsrep_sst_aut这行代码,但是这样不安全。 启动第一台机器(192.168.100.71): service mysql stop service mysql restart (首选此方法,启动第1台galera集群服务,其他galera主机也用此方法) service mysql start --wsrep-new-cluster (备选方法,很多贴子说在第一台galera集群主机必须用此方法运行,其实并不是) 其中--wsrep-new-cluster只要在初始化集群的时候才能用,后面服务重启都不要用,这时候可以查看集群状态了: mysql -uroot -p -e "show status like 'wsrep_%';" 如果一切正常的话可以看到下面信息,说明当前节点已经启动成功。(金测OK) | wsrep_incoming_addresses | 192.168.100.71:3306 | | wsrep_cluster_size | 3 | --------------- 启动其他节点: 第2台galera主机(192.168.100.72): 第1步:配置mariadb-galera的yum源,安装软件。 yum install MariaDB-Galera-server MariaDB-client galera mlocate createrepo -y rpm -q MariaDB-Galera-server MariaDB-client galera 安装完后,查看ls /etc/my.cnf.d/下的文件是否为如下: mariadb-client.conf server.conf tokudb.conf
查galera的动态链接库文件路径: updatedb locate libgalera_smm.so 第2步:启动mysql服务,创建用于galera同步的用户账号。 service mysql start mysql -uroot grant all PRIVILEGES on *.* to myroot@'%' identified by 'reppass'; FLUSH PRIVILEGES; select user,host,password from mysql.user; exit 第3步:修改/etc/my.cnf.d/server.cnf 在[galera]内部增加如下内容: wsrep_on=ON binlog_format=ROW bind-address=0.0.0.0 default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 wsrep_cluster_name=MyCLuster wsrep_provider=/usr/lib64/galera/libgalera_smm.so ##wsrep_cluster_address="gcomm://" //用于第一台galera集群主机 wsrep_cluster_address="gcomm://192.168.100.71,192.168.100.72,192.168.100.73" //用于其他galera集群主机 wsrep_node_name=node2 //当前集群主机名 wsrep_node_address=192.168.100.72 //当前集群主机ip地址 wsrep_sst_method=rsync wsrep_sst_auth=myroot:reppass //同步的账号myroot,密码reppass 第3步:启动第2台galera主机的服务 service mysql start 再次查看集群信息:mysql -uroot -p -e "show status like 'wsrep_%';" | wsrep_incoming_addresses | 192.168.100.71:3306,192.168.100.72:3306 | | wsrep_cluster_size | 2 | 至此,整个集群中的2台galera主机就搭建好了,测试一下,在任意一个节点创建一个库: mysql -uroot -p -e "create database pfma_test" 在本机和其他节点查看: mysql> show databases; 附加任务:在galera集群中再添加192.168.100.73这台主机,直接参照第2台galera主机(192.168.100.72)的安装和配置方法。 再次查看集群信息:mysql -uroot -p -e "show status like 'wsrep_%';" | wsrep_incoming_addresses | 192.168.100.71:3306,192.168.100.72:3306,192.168.100.73:3306 | | wsrep_cluster_size | 3 | 至此,整个集群就搭建好了,测试一下,在任意一个节点创建一个库: ======== galera集群部署的方法二: 网上的galera的yum源(很慢,不采用) [galera] name = Galera baseurl = http://releases.galeracluster.com/centos/6/x86_64#这里的centos/6/x86_64需要根据你的系统自行修改 gpgkey = http://releases.galeracluster.com/GPG-KEY-galeracluster.com gpgcheck = 1 之后 yum update yum install galera-3 mysql-wsrep-5.7 手动下载安装 因为墙的原因,我们经常会发现无法直接用yum安装,可以挂代理后手动安装,根据你的系统打开对应网址,譬如我的64位centos6.5就打开http://releases.galeracluster.com/centos/6/x86_64/,下载如下几个文件: mysql-wsrep-libs-compat-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm mysql-wsrep-common-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm mysql-wsrep-libs-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm mysql-wsrep-shared-5.6-5.6.35-25.18.20170106.1f9ae89.el6.x86_64.rpm galera-3-25.3.20-2.el6.x86_64.rpm mysql-wsrep-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm mysql-wsrep-client-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm mysql-wsrep-server-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm 安装前需要检查是否已经有mysql存在,以免后续产生冲突: rpm -qa|grep -i mysql rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 #卸载后面会冲突的包 如果存在则全部卸载后就可以安装了,其中galera-3依赖boost-program-options,需要提前安装好: yum install boost-program-options rpm -ivh mysql-wsrep-common-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm rpm -ivh mysql-wsrep-libs-compat-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm rpm -ivh mysql-wsrep-libs-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm rpm -ivh mysql-wsrep-shared-5.6-5.6.35-25.18.20170106.1f9ae89.el6.x86_64.rpm rpm -ivh galera-3-25.3.20-2.el6.x86_64.rpm rpm -ivh mysql-wsrep-client-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm rpm -ivh mysql-wsrep-server-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm rpm -ivh mysql-wsrep-5.7-5.7.17-25.10.20170117.92194e2.el6.x86_64.rpm 启动mysql service mysqld start 新版本的mysql必须使用初始密码登录了,无法本地匿名或admin方式初始化密码了,初始化密码一般存放在errlog里可以通过 ps -ef | grep mysql 来查询errlog位置,然后再通过 cat /var/log/mysqld.log | grep "temporary password" 来查看你的初始密码,第一次登录后会强制你修改密码的。 ALTER USER 'root'@'localhost' IDENTIFIED BY '1qaz!QAZ';#新版本对密码强度有要求了,不然会报错 grant all PRIVILEGES on *.* to myroot@'%' identified by 'reppass';#创建新用户 FLUSH PRIVILEGES; 配置 编辑/etc/my.cnf在[mysqld]内部增加如下内容: binlog_format=ROW bind-address=0.0.0.0 default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_flush_log_at_trx_commit=0 wsrep_cluster_name=MyCLuster#你的cluster名,每台机器上的要相同 wsrep_provider=/usr/lib64/galera-3/libgalera_smm.so#不同版本这个路径可能不同,需要自行确定 wsrep_cluster_address="gcomm://"#第一台机器需要这样配置 #wsrep_cluster_address="gcomm://192.168.80.136,192.168.80.137,192.168.80.138"#其他机器需要配置同步源路径 wsrep_node_name=node1#当前机器的节点名 wsrep_node_address=192.168.80.136#当前机器ip wsrep_sst_method=rsync#同步方式 wsrep_sst_auth=myroot:reppass 启动第一台机器: service mysqld start --wsrep-new-cluster 其中--wsrep-new-cluster只要在初始化集群的时候才能用,后面服务重启都不要用,这时候可以查看集群状态了: mysql -uroot -p -e "show status like 'wsrep_%'" 如果一切正常的话可以看到下面信息,说明当前节点已经启动成功。 | wsrep_incoming_addresses | 192.168.80.136:3306 | | wsrep_cluster_size | 3 | 启动其他节点 service mysqld start 再次查看集群信息: mysql -uroot -p -e "show status like 'wsrep_%'" | wsrep_incoming_addresses | 192.168.80.139:3306,192.168.80.138:3306,192.168.80.137:3306 | | wsrep_cluster_size | 3 | 至此,整个集群就搭建好了,测试一下,在任意一个节点创建一个库: mysql -uroot -p -e "create database pfma_test" 在其他节点查看: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | pfma_test | | sys | +--------------------+ 5 rows in set (0.07 sec) 可以发现确实有正常地同步了其他节点的操作。 ====================================== MySQL高可用架构之Galera Cluster [日期:2017-04-06] 来源:Linux社区 MySQL高可用架构之Galera Cluster 1、实验准备及拓扑 至少需要三个节点 node1 192.168.150.137 node2 192.168.150.138 node3 192.168.150.139 mariadb版本为mariadb的支持galera cluster的分支版本 MariaDB-Galera-server-5.5.46 实验前准备: 1、HA环境首要条件:时间同步 三个节点添加对时脚本 [root@localhost ~]# crontab -l */5 * * * * /usr/sbin/ntpdate 1.cn.pool.ntp.org 2、三个几点均配置MariaDB-Galera的本地yum仓库,我尝试使用mariadb官方提供的yum仓库,天朝的网会气死你 [root@localhost ~]# cat /etc/yum.repos.d/galera.repo [galera] name=galera baseurl=file:///root/galera_cluster gpgcheck=0 enable=1 3、yum安装,仅需安装MariaDB-Galera-server,其余的均会依赖安装 yum -y install Mariadb-Galera-server 2、配置 1、查看galera所需调用的库的位置 rpm -ql galera | grep -i smm.so /usr/lib64/galera/libgalera_smm.so 2、修改配置文件,三节点同步修改 [root@localhost yum.repos.d]# cat /etc/my.cnf.d/server.cnf # # These groups are read by MariaDB server. # Use it for options that only the server (but not clients) should see # # See the examples of server my.cnf files in /usr/share/mysql/ # # this is read by the standalone daemon and embedded servers [server] # this is only for the mysqld standalone daemon [mysqld] # # * Galera-related settings # [galera] # Mandatory settings wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://192.168.150.137,192.168.150.138,192.168.150.139" binlog_format=row default_storage_engine=InnoDB innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 wsrep_cluster_name='mycluster' # # Optional setting #wsrep_slave_threads=1 #innodb_flush_log_at_trx_commit=0 # this is only for embedded server [embedded] # This group is only read by MariaDB-5.5 servers. # If you use the same .cnf file for MariaDB of different versions, # use this group for options that older servers don't understand [mysqld-5.5] # These two groups are only read by MariaDB servers, not by MySQL. # If you use the same .cnf file for MySQL and MariaDB, # you can put MariaDB-only options here [mariadb] [mariadb-5.5] 3、节点1进行mysql及cluster开启 [root@localhost ~]# /etc/rc.d/init.d/mysql start --wsrep-new-cluster Starting MySQL.... SUCCESS! 4、其它两个节点进行正常的mysql开启 [root@localhost ~]# service mysql start Starting MySQL....SST in progress, setting sleep higher. SUCCESS! 此时已配置完成。。。。。。 3、功能验证 1、节点1创建数据库,节点2 3均可正常查看 节点1:[root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 5.5.46-MariaDB-wsrep MariaDB Server, wsrep_25.12.r4f81026 Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE mydb; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | test | +--------------------+ 节点2 3: [root@localhost ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 5.5.46-MariaDB-wsrep MariaDB Server, wsrep_25.12.r4f81026 Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.01 sec) 2、节点2数据库中创建表,节点1 2均可正常查看 节点2: MariaDB [(none)]> use mydb; Database changed MariaDB [mydb]> CREATE TABLE tb1 (id int,name char(10)); Query OK, 0 rows affected (0.01 sec) 节点1 3: MariaDB [(none)]> use mydb Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mydb]> SHOW TABLES -> ; +----------------+ | Tables_in_mydb | +----------------+ | tb1 | +----------------+ 1 row in set (0.00 sec) MariaDB [mydb]> DESC tb1; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | char(10) | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 2 rows in set (0.02 sec) 3、自增栏位的测试,每个几点会跳着进行自增,同时插入时例如1节点1 4 7;2节点2 5 8;三节点3 6 9。 节点1: MariaDB [mydb]> CREATE TABLE tb2(id int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,name char(30) uery OK, 0 rows affected (0.01 sec) MariaDB [mydb]> INSERT INTO tb2 (name) VALUES ('void'),('yao'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 节点2: MariaDB [mydb]> select * from tb2; +----+------+ | id | name | +----+------+ | 1 | void | | 4 | yao | +----+------+ 2 rows in set (0.01 sec) MariaDB [mydb]> INSERT INTO tb2 (name) VALUES ('amy'),('apple'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [mydb]> select * from tb2; +----+-------+ | id | name | +----+-------+ | 1 | void | | 4 | yao | | 5 | amy | | 8 | apple | +----+-------+ 4 rows in set (0.00 sec) 本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142563.htm 本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1953479,如需转载请自行联系原作者 |
CopyRight 2018-2019 实验室设备网 版权所有 |